﻿//#pragma once
//#include<stdio.h>
//#include<windows.h>
//#include<stdbool.h>
//#include<stdlib.h>
//#include<time.h>
//
//#define posx 24
//#define posy 5
//
//#define wall L'□'
//#define body L'●'
//#define food L'★'
////贪吃蛇的方向
//enum direction
//{
//	up = 1,
//	down,
//	lefy,
//	right,
//};
//
////蛇的运动状态
//enum gamestatus
//{
//	//正常运动
//	ok,
//	//撞墙死亡
//	killbywall,
//	//撞到自己死亡
//	killbyself,
//	//正常退出结束
//	endnormal,
//};
//
////贪吃蛇的节点类型
//typedef struct snakenode
//{
//	//定义坐标
//	int x;
//	int y;
//	//指向下一个节点的指针
//	struct snakenode* next;
//}snakenode;
//
////typedef struct snakenode* psnakenode;
//
////贪吃蛇
//typedef struct snake
//{
//	//指向蛇的头部
//	snakenode* psnake;
//	//指向食物的指针
//	snakenode* pfood;
//	//贪吃蛇的移动方向
//	enum direction dir;
//	//蛇运动的状态（撞墙，撞到自己，正常运行，退出exe）等等
//	enum gamestatus status;
//	//食物的分数
//	int foodweight;
//	//总成绩
//	int score;
//	//休息的时间(控制运动的快慢）
//	int sleeptime;
//}snake;
//
////开始游戏
//void gamestart(snake* ps);
//
////创建欢迎界面
//void welcometogame();
//
////创建地图
//void creatmap();
//
////初始化蛇的身体
//void initsnake(snake* ps);
//
////创建食物
//void creatfood(snake* ps);




#pragma once
#include <windows.h>
#include <time.h>
#include <stdio.h>
#include<stdbool.h>
#define KEY_PRESS(VK) ((GetAsyncKeyState(VK)&0x1) ? 1 : 0)
//⽅向
enum DIRECTION
{
	UP = 1,
	DOWN,
	LEFT,
	RIGHT
};
//游戏状态
enum GAME_STATUS
{
	OK,//正常运⾏
	KILL_BY_WALL,//撞墙
	KILL_BY_SELF,//咬到⾃⼰
	END_NOMAL//正常结束
};
#define WALL L'□'
#define BODY L'●' //★○●◇◆□■
#define FOOD L'★' //★○●◇◆□■
//蛇的初始位置
#define POS_X 24
#define POS_Y 5
//蛇⾝节点
typedef struct SnakeNode
{
	int x;
	int y;
	struct SnakeNode* next;
}SnakeNode, * pSnakeNode;
typedef struct Snake
{
	pSnakeNode _pSnake;//维护整条蛇的指针
	pSnakeNode _pFood;//维护⻝物的指针
	enum DIRECTION _Dir;//蛇头的⽅向默认是向右
	enum GAME_STATUS _Status;//游戏状态
	int _Socre;//当前获得分数
	int _foodWeight;//默认每个⻝物10分
	int _SleepTime;//每⾛⼀步休眠时间
}Snake, * pSnake;
//游戏开始前的初始化
void GameStart(pSnake ps);
//游戏运⾏过程
void GameRun(pSnake ps);
//游戏结束
void GameEnd(pSnake ps);
//设置光标的坐标
void SetPos(short x, short y);
//欢迎界⾯
void WelcomeToGame();
//打印帮助信息
void PrintHelpInfo();
//创建地图
void CreateMap();
//初始化蛇
void InitSnake(pSnake ps);
//创建⻝物
void CreateFood(pSnake ps);
//暂停响应
void pause();
//下⼀个节点是⻝物
int NextIsFood(pSnakeNode psn, pSnake ps);
//吃⻝物
void EatFood(pSnakeNode psn, pSnake ps);
//不吃⻝物
void NoFood(pSnakeNode psn, pSnake ps);
//撞墙检测
int KillByWall(pSnake ps);
//撞⾃⾝检测
int KillBySelf(pSnake ps);
//蛇的移动
void SnakeMove(pSnake ps);
//游戏初始化
void GameStart(pSnake ps);
//游戏运⾏
void GameRun(pSnake ps);
//游戏结束
void GameEnd(pSnake ps);